package com.zmn.oms.common.constant;

import com.alibaba.fastjson.annotation.JSONField;
import com.google.common.collect.Lists;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.*;

/**
 * 类描述： 订单详情时间轴
 *
 * @author yule
 * @date 2020/5/15 16:19
 */
public class OrderNodeSpoolConsts {

    //节点 提交订单、派单、领单、联系用户、上门、完成、订单取消、保修卡、评价、再次上门
    public static List<Integer> types = Arrays.asList(
            OrderLogConsts.ORDER_LOG_TYPE_INPUT, // 101
            OrderLogConsts.ORDER_LOG_TYPE_DISTRIBUTE, // 104
            OrderLogConsts.ORDER_LOG_TYPE_DISTRIBUTE_BACK,// 180
            OrderLogConsts.ORDER_LOG_TYPE_ASSIGN_BACK, //172
            OrderLogConsts.ORDER_LOG_TYPE_TAKE, // 121
            OrderLogConsts.ORDER_LOG_TYPE_CONTACT_USER, // 125
            OrderLogConsts.ORDER_LOG_TYPE_VISIT, // 122
            OrderLogConsts.ORDER_LOG_TYPE_COMPLETE, // 112
            OrderLogConsts.ORDER_LOG_TYPE_APPLY_REFUND,
            OrderLogConsts.ORDER_LOG_TYPE_CANCEL,
            OrderLogConsts.ORDER_LOG_TYPE_REFUND_RESULT, // 108,
            OrderLogConsts.ORDER_LOG_TYPE_APPLY_MULTIPLE_VISIT
          //  OrderLogConsts.ORDER_LOG_TYPE_COMMENT // 162
    );


    /**
     *
     */
    public static final List<OrderNodeSpoolConsts.OrderNodeSpoolDRO> ORDER_NODE_SPOOL_LIST = Lists.newArrayList();

    static {
        ORDER_NODE_SPOOL_LIST.add(new OrderNodeSpoolConsts.OrderNodeSpoolDRO(null, "待工程师接单", "小啄将督促工程师尽快接单，请主人耐心等待", null));
        ORDER_NODE_SPOOL_LIST.add(new OrderNodeSpoolConsts.OrderNodeSpoolDRO(null, "待确认具体上门时间", "待工程师与主人确认具体上门时间", null));
        ORDER_NODE_SPOOL_LIST.add(new OrderNodeSpoolConsts.OrderNodeSpoolDRO(null, "待工程师上门", "待工程师上门，请主人耐心等待", null));
        ORDER_NODE_SPOOL_LIST.add(new OrderNodeSpoolConsts.OrderNodeSpoolDRO(null, "待完成工单", "小啄将监督工程师为主人提供满意的服务", null));
        ORDER_NODE_SPOOL_LIST.add(new OrderNodeSpoolConsts.OrderNodeSpoolDRO(null, "待评价", "服务已完成，期待主人的评价", null));
    }


    /**
     * 查询工单操作类型名称
     *
     * @param type 工单操作类型
     * @return 工单操作类型名称
     */
    public static String getOperateTypeName(int type) {
        switch (type) {
            case OrderLogConsts.ORDER_LOG_TYPE_INPUT:
                return "订单已生成";
            case OrderLogConsts.ORDER_LOG_TYPE_DISTRIBUTE_BACK:
            case OrderLogConsts.ORDER_LOG_TYPE_ASSIGN_BACK:
                return "订单已改派";
            case OrderLogConsts.ORDER_LOG_TYPE_DISTRIBUTE:
                return "订单已重新派单";
            case OrderLogConsts.ORDER_LOG_TYPE_TAKE:
                return "工程师已接单";
            case OrderLogConsts.ORDER_LOG_TYPE_CONTACT_USER:
                return "服务时间已确认";
            case OrderLogConsts.ORDER_LOG_TYPE_VISIT:
                return "工程师已上门";
            case OrderLogConsts.ORDER_LOG_TYPE_COMPLETE:
                return "服务已完成";
            case OrderLogConsts.ORDER_LOG_TYPE_CANCEL:
                return "订单已取消";
            case OrderLogConsts.ORDER_LOG_TYPE_APPLY_REFUND:
                return "用户发起退款";
            case OrderLogConsts.ORDER_LOG_TYPE_REFUND_RESULT:
                return "用户退款成功";
            case OrderLogConsts.ORDER_LOG_TYPE_WARRANTY:
                return "已发保修卡";
            case OrderLogConsts.ORDER_LOG_TYPE_COMMENT:
                return "已评价";
            case OrderLogConsts.ORDER_LOG_TYPE_APPLY_MULTIPLE_VISIT:
                return "待工程师再次上门";
            case OrderLogConsts.ORDER_LOG_TYPE_AGAIN_VISIT:
                return "工程师已再次上门";
            default:
                return "未知";
        }
    }

    /**
     * 查询工单操作类型名称
     *
     * @param type 工单操作类型
     * @return 工单操作类型名称
     */
    public static String getOperateTypeRemark(int type, String masterName, String masterPhone, Integer masterId, Integer servItemType, boolean isExistWarranty, String content) {
        switch (type) {
            case OrderLogConsts.ORDER_LOG_TYPE_INPUT:
                return "预定成功，将尽快为主人派单";
            case OrderLogConsts.ORDER_LOG_TYPE_DISTRIBUTE:
                return "订单交给" + masterName + "，小啄将督促工程师尽快接单";
            case OrderLogConsts.ORDER_LOG_TYPE_DISTRIBUTE_BACK:
            case OrderLogConsts.ORDER_LOG_TYPE_ASSIGN_BACK:
                return "改派成功，将尽快为主人派单";
            case OrderLogConsts.ORDER_LOG_TYPE_TAKE:
                return masterName + "将尽快联系主人确认上门服务时间，为保障主人个人隐私，已开启隐私小号，请主人放心接听";
            case OrderLogConsts.ORDER_LOG_TYPE_CONTACT_USER:
                return "工程师将尽快上门，请主人耐心等待";
            case OrderLogConsts.ORDER_LOG_TYPE_VISIT:
                // 计价器
                if (Objects.equals(OrderConsts.SERVICE_ITEM_TYPE_FAULT, servItemType)) {
                    return "为保障主人权益，订单如需报价请亲自使用啄木鸟维修计价器";
                }
                return "为保障主人权益，请监督工程师服务，如主人有任何疑问可随时联系小啄";
            case OrderLogConsts.ORDER_LOG_TYPE_COMPLETE:
                if (isExistWarranty) {// 有保修卡
                    //return "请主人进入“我的->保修卡”页面查收保修卡";
                    return "小啄期待再次为主人服务，订单完成6个月以内可申请开具发票";
                }
                //return "小啄用真心一直在线守护主人的家，任何售后问题请随时联系小啄或拨打400-023-8888";
                return "小啄用真心一直在线守护主人的家，订单完成6个月以内可申请开具发票，任何售后问题可随时联系小啄";
            case OrderLogConsts.ORDER_LOG_TYPE_CANCEL:
                return "取消成功，小啄将再接再厉，随时等候主人的召唤，任何问题请联系小啄或拨打400-023-8888";
            case OrderLogConsts.ORDER_LOG_TYPE_APPLY_REFUND:
                return "已发起退单，小啄将在24小时内尽快处理主人的退款申请";
            case OrderLogConsts.ORDER_LOG_TYPE_REFUND_RESULT:
                return "退款受理成功，将尽快退回到主人的支付账户，请主人注意查收，期待再次为主人服务";
            case OrderLogConsts.ORDER_LOG_TYPE_WARRANTY:
            case OrderLogConsts.ORDER_LOG_TYPE_COMMENT:
                return "";
            case OrderLogConsts.ORDER_LOG_TYPE_APPLY_MULTIPLE_VISIT:
                return "工程师将在xxx再次上门，请主人耐心等待";
            case OrderLogConsts.ORDER_LOG_TYPE_AGAIN_VISIT:
                return "为保障主人权益，订单如需报价请亲自使用啄木鸟维修计价器";
            default:
                return "未知";
        }
    }

    public static OrderNodeSpoolConsts getInstance() {
        return OrderNodeSpoolConsts.SingletonHolder.INSTANCE;
    }
    public List<OrderNodeSpoolConsts.OrderNodeSpoolDRO> getNodeSpoolList() {
        return ORDER_NODE_SPOOL_LIST;
    }

    private static class SingletonHolder {
        private static final OrderNodeSpoolConsts INSTANCE = new OrderNodeSpoolConsts();
    }

    /**
     * 发送要客短信对象的详细信息
     */
    public static class OrderNodeSpoolDRO {
        /**
         * 操作节点类型id
         */
        private Integer logType;
        /**
         * 操作节点类型名称
         */
        private String logTypeName;
        /**
         * 操作节点内容
         */
        private String logRemark;
        /**
         * 操作时间
         */
        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        @JSONField(format = "yyyy-MM-dd HH:mm:ss")
        private Date operateTime;

        public OrderNodeSpoolDRO(Integer logType, String logTypeName, String logRemark, Date operateTime) {
            this.logType = logType;
            this.logTypeName = logTypeName;
            this.logRemark = logRemark;
            this.operateTime = operateTime;
        }

        public Integer getLogType() {
            return logType;
        }

        public void setLogType(Integer logType) {
            this.logType = logType;
        }

        public String getLogTypeName() {
            return logTypeName;
        }

        public void setLogTypeName(String logTypeName) {
            this.logTypeName = logTypeName;
        }

        public String getLogRemark() {
            return logRemark;
        }

        public void setLogRemark(String logRemark) {
            this.logRemark = logRemark;
        }

        public Date getOperateTime() {
            return operateTime;
        }

        public void setOperateTime(Date operateTime) {
            this.operateTime = operateTime;
        }
    }

}